package com.love.labuladong.stack;

import java.util.Arrays;

/**
 * @Author : zh
 * @Description : 每日温度
 *
 * 总结： 找右边比自己最近大的，使用大底栈，反之用小底栈
 *
 * @Date : 2024-08-27 15:05
 */
public class EveryTemperatures {


    public static void main(String[] args) {
        int[] nums = {3,2,4,4,6,6,2};
        int[] ints = searchHigher(nums);
        System.out.println(Arrays.toString(ints));
    }

    public static int[] searchHigher(int[] temperatures){
        if(temperatures == null || temperatures.length == 0){
            return new int[]{};
        }
        int n = temperatures.length;
        int[] stack = new int[n];
        int size = 0;
        int[] res = new int[n];

        int i = 0;
        while (i < n){
            // 相等也加入单调栈
            while (size > 0 && temperatures[stack[size-1]] < temperatures[i] ){
                res[stack[size-1]] = i - stack[size-1];
                size--;
            }
            stack[size++] = i;
            i++;
        }

        // 清算（可以不清算，是因为int[]初始就为0，如果右边没有比自己大的为-1的话，就得清算）
        while (size > 0){
            res[stack[size-1]] = 0;
            size--;
        }
        return res;
    }

}
